//
//  JCLStatusDAL.swift
//  WeiBo
//
//  Created by DDC on 2017/9/30.
//  Copyright © 2017年 DDC. All rights reserved.
//

import Foundation


// 数据处理层--Data Access Layer 
/*
    思路:
        1. 检查数据库表是否有数据，如果有就直接返回
        2. 如果没有从网络加载数据
        3. 将网络加载的数据存入数据库
        4. 再从数据库中加载数据
 */
class JCLStatusDAL {
    
    /// 从数据库表中加载数据
    ///
    /// - Parameters:
    ///   - since_id: 上拉id
    ///   - max_id: 下拉id
    ///   - completion: 完成回调
    class func loadStatus(since_id:Int64 = 0,max_id:Int64 = 0, completion:@escaping (_ list:[[String:Any]]?,_ isSuccess:Bool)->()) {
        
        // userId
        guard let userId = JCLNetWorkTools.shared.userAccount.uid else {
            return
        }
        
        // 1.检查数据库表是否有数据，如果有就直接返回
        let array = JCLSQLiteManager.shared.loadStatus(userId: userId, since_id: since_id, max_id: max_id)
        if array.count > 0 {
            
            // 直接返回数据,完成回调
            completion(array, true)
        }
        // 2.如果数据库没有数据 ,就需要从网络加载数据
        // 如果网络加载失败 直接返回
        // 加载网络 
        JCLNetWorkTools.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            // 网络加载失败
            if !isSuccess  {
                completion(nil, false)
                return
            }
            // 3.网络加载成功之后  ，将数据存入数据库
            guard let list = list else {
                completion(nil, isSuccess)
                return
            }
            // 存入数据库
            JCLSQLiteManager.shared.updateStatus(userId: userId, array: list)
            // 4.完成回调
            completion(list, isSuccess)
            
        }
        
          
    }
}
